#include <stdio.h>
#include "../includes/fun-main.h"

void InitValoresMain(){
	indiceperfil=-1;
}

//-------------------------------------------------------

void insertarparam(int tipoval,char *nombre)

/*-------------------------------------------------------
     guarda los parametros y su tipo en un arreglo 
     (perfilfunc[])
---------------------------------------------------------*/

{   indiceperfil++;
	perfilfunc[indiceperfil].tipo=tipoval;
	perfilfunc[indiceperfil].nombre=nombre;
}

//------------------------------------------------------

void generarmain( char *nombremain, char *nombrefuncion,int tipodevol )

// genera el archivo que contiene el main
//------------------------------------------------------

{   int i=0;
    g = fopen(nombremain,"w");

    /*escribimos el perfil de la funcion c-- compilada*/
	fprintf(g,"%s\n","#include <stdio.h>");  
    if (tipodevol==1)
	    fprintf(g,"%s","int ");
    else
	    fprintf(g,"%s","float ");

    fprintf(g,"%s%s",nombrefuncion,"(");	    

    /*escribimos los parametros de la funcion c-- compilada*/
    while (i<=indiceperfil)
	{   if (perfilfunc[i].tipo==1)
		    fprintf(g,"%s","int ");
	    else
		    fprintf(g,"%s","float ");

	    if (i<indiceperfil)	
			fprintf(g,"%s%s",perfilfunc[i].nombre,",");
	    else
	    	fprintf(g,"%s%s\n",perfilfunc[i].nombre,");");
	    i++;
	}

    /*definimos la funcion main*/
    fprintf(g,"\n%s\n%s\n","int main(int argc,char *argv[])","{");

    /*declaramos tantas variables como parametros 
      haya(inicializadas en cero)*/
    i=0;
    while (i<=indiceperfil)
	{
	    if (perfilfunc[i].tipo==1)
		    fprintf(g,"\t%s","int ");
    	else
			fprintf(g,"\t%s","float ");

/*	    if (i<indiceperfil)	*/
        	fprintf(g,"%s%s\n", perfilfunc[i].nombre,"=0;");
/*	   	else   */
/*			fprintf(g,"%s%s\n", perfilfunc[i].nombre,"=0;");*/
	    i++;
	}
   
	/*se obtienen los valores de los parametros (se pasa de 
      string a integer o float segun 
      el caso)y se los asigna a cada una de las variables 
      definidas*/
    i=0;
    while (i<=indiceperfil)
	{   fprintf(g,"\t%s%d%s\n","if (argc>",i+1,")");
	   
		if (perfilfunc[i].tipo==1)
               fprintf( g,"\t\t%s%d%s%s", "sscanf(argv[",i+1,"],\"%", "d\", &" );
	    else				    
               fprintf( g,"\t\t%s%d%s%s", "sscanf(argv[",i+1,"],\"%", "f\", &" );

	    if (i<indiceperfil)	
               fprintf( g,"%s%s\n", perfilfunc[i].nombre, ");" );
	    else   
               fprintf( g,"%s%s\n", perfilfunc[i].nombre, ");" );
	    i++;
	}

	/*se define el printf que mostrara los resultados por
	  pantalla, con la siguiente forma:*/
/*	printf( "%s%d%s%d\n", "nombrefuncion(",param,")= ,nombrefuncion(",param,")");*/
	fprintf(g,"\t%s%s", "\tprintf(\"%" , "s" );
    i=0;
    while (i<=indiceperfil)
	{	if (i<indiceperfil){
			if (perfilfunc[i].tipo==1)	
				fprintf(g,"%s%s","%","d,");
			else
				fprintf(g,"%s%s","%","f,");
		}
	    else{
			if (perfilfunc[i].tipo==1)	
				fprintf(g,"%s%s","%","d");
			else
				fprintf(g,"%s%s","%","f");
		}
	    i++;
	}
    fprintf(g,"%s%s", "%","s");

    if (tipodevol==1)
		fprintf( g, "%s%s%s", " %", "d\\", "n\",");
    else
		fprintf( g, "%s%s%s", " %", "f\\", "n\",");

    fprintf(g,"%s%s%s%s","\"",nombrefuncion,"(\"",",");

    i=0;
    while (i<=indiceperfil)
	{	if (i<indiceperfil)	
			fprintf(g,"%s%s",perfilfunc[i].nombre,",");
	    else
			fprintf(g,"%s%s",perfilfunc[i].nombre,",\")= \"");
	    i++;
	}    

    fprintf(g,"%s%s%s",",",nombrefuncion,"(");

    i=0;
    while (i<=indiceperfil)
	{	if (i<indiceperfil)	
		   fprintf(g,"%s%s",perfilfunc[i].nombre,",");
	    else
			fprintf(g,"%s%s",perfilfunc[i].nombre,")");
	    i++;
	}	
 
	fprintf(g,"%s\n\t%s\n%s",");","return 0;","}");
    fclose(g);

}
